home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Other / GACUPS / Source / StatusMonitor.m < prev    next >
Encoding:
Text File  |  1993-08-12  |  3.4 KB  |  120 lines

  1. /* Written 8/12/93 by Max Hailperin <max@nic.gac.edu>, Math/CS department,
  2.    Gustavus Adolphus College.  Public domain, no warranty.  Please share
  3.    any improvements with me.  */
  4.  
  5. /* Generated by Interface Builder */
  6.  
  7. #import "StatusMonitor.h"
  8. #import "GACUPSSpeaker.h"
  9. #import <appkit/appkit.h>
  10. #import <dpsclient/dpsclient.h>
  11. #import <time.h>
  12.  
  13. #define PERIOD 5.0
  14.  
  15. static void handleTE(DPSTimedEntry te, double now, void *monitor){
  16.   [(id)monitor update:(id)monitor];
  17. }
  18.  
  19. static char *timeString(time_t time){
  20.   static char buf[100];
  21.   strftime(buf, sizeof(buf), "%X", localtime((time_t*)&time));
  22.   return buf;
  23. }
  24.  
  25. static char *tenthsToStr(int tenths){
  26.   static char buf[100];
  27.   sprintf(buf, "%d.%d", tenths/10, tenths%10);
  28.   return buf;
  29. }
  30.  
  31.   
  32. @implementation StatusMonitor
  33.  
  34. - appDidInit:sender
  35. {
  36.     NXDefaultsVector defaults = {{"Hostname", "localhost"}, {NULL, NULL}};
  37.     NXRegisterDefaults([NXApp appName], defaults);
  38.     [hostnameField
  39.       setStringValue:NXGetDefaultValue([NXApp appName], "Hostname")];
  40.     [panel makeKeyAndOrderFront:self];
  41.     [hostnameField selectText:self];
  42.     speaker = [[GACUPSSpeaker alloc] init];
  43.     return [self newHost:hostnameField];
  44. }
  45.  
  46. - windowWillClose:sender
  47. {
  48.     [NXApp terminate:self];
  49.     return self;
  50. }
  51.  
  52. - update:sender
  53. {
  54.   int systemMode, inverterStatus, alarmStatus, ACInputVolts, ACOutputVolts,
  55.   ACOutputDeciAmperes, ACLoadVA, batteryDeciVolts, deciHertz, minutes,
  56.   ambientTemp, ROMVersion, time;
  57.  
  58.   if(![speaker systemMode: &systemMode
  59.         inverterStatus: &inverterStatus
  60.         alarmStatus: &alarmStatus
  61.     ACInputVolts: &ACInputVolts
  62.     ACOutputVolts: &ACOutputVolts
  63.     ACOutputDeciAmperes: &ACOutputDeciAmperes
  64.     ACLoadVA: &ACLoadVA
  65.     batteryDeciVolts: &batteryDeciVolts
  66.     deciHertz: &deciHertz
  67.     minutes: &minutes
  68.     ambientTemp: &ambientTemp
  69.     ROMVersion: &ROMVersion
  70.     time: &time]){
  71.     [systemModeCell setStringValue:(systemMode?"Normal":"Shutdown")];
  72.     [inverterStatusCell setStringValue:(inverterStatus?"On":"Off")];
  73. #ifdef FAKEALARMS
  74.     alarmStatus = FAKEALARMS;   // to help me debug
  75. #endif
  76.     {int i;
  77.      for(i = 0; i < [alarms cellCount]; i++)
  78.        [[alarms findCellWithTag:i] setTextGray:
  79.         ((alarmStatus&(1<<i))?NX_BLACK:NX_DKGRAY)];
  80.     }
  81.     [ACInputVoltsCell setIntValue:ACInputVolts];
  82.     [ACOutputVoltsCell setIntValue:ACOutputVolts];
  83.     [ACOutputAmperesCell setStringValue:tenthsToStr(ACOutputDeciAmperes)];
  84.     [ACLoadVACell setIntValue:ACLoadVA];
  85.     [batteryVoltageCell setStringValue:tenthsToStr(batteryDeciVolts)];
  86.     [frequencyCell setStringValue:tenthsToStr(deciHertz)];
  87.     [minutesCell setIntValue:minutes];
  88.     [ambientTempCell setIntValue:ambientTemp];
  89.     [ROMRevisionCell setIntValue:ROMVersion];
  90.     [timeCell setStringValue:timeString(time)];
  91.   }
  92.   return self;
  93. }
  94.  
  95. - newHost:sender
  96. {
  97.     static DPSTimedEntry te;
  98.     static char portName[1024];
  99.     port_t daemonPort;
  100.     if(te){
  101.         DPSRemoveTimedEntry(te);
  102.         te = 0;
  103.       }
  104.     NXWriteDefault([NXApp appName], "Hostname", [sender stringValue]);
  105.     if(!*portName) sprintf(portName, "%s.daemon", [NXApp appName]);
  106.     daemonPort = NXPortFromName(portName, [sender stringValue]);
  107.     if(daemonPort == PORT_NULL){
  108.       NXRunAlertPanel([NXApp appName], "No GACUPS daemon found on this host.",
  109.         "OK", NULL, NULL);
  110.     } else {
  111.       [speaker setSendPort:daemonPort]; 
  112.       [self update:self];
  113.       te = DPSAddTimedEntry(PERIOD, handleTE, (void*)self, NX_BASETHRESHOLD);
  114.     }
  115.     return self;
  116. }
  117.  
  118.  
  119. @end
  120.